/**
 * 
 * 角色基础类

 * 
 */
class Role extends egret.DisplayObjectContainer {
    /** 角色名称 */
    public role_name = new egret.TextField();
    /** 承载角色的盒子, 给角色添加装备之类的就靠这个 */
    public context: egret.Sprite = new egret.Sprite();
    /** 角色皮肤贴图 */
    public role_png: egret.Bitmap = new egret.Bitmap();
    /** 角色的移动速度 */
    public speed: number = 3;
    /** 移动方向 */
    public angel: number = null;
    /** 角色初始位置 */
    public role_path: any = { x: 400, y: 400 };
    /////////////////////////////////////
    // 角色运动状态设置区
    // 当前进行中状态. 状态: 1.站立, 2.行走, 3.奔跑, 4.跳跃, 5.倒地, 6.被击, 7.攻击
    public nowState = 1;
    // 当前是否可行走状态
    public canWalk = true;
    // 当前是否可攻击状态
    public canAttack = true;
    //////////////////////////////////////
    

    public constructor() {
        super();
        this.once(egret.Event.ADDED_TO_STAGE, this.init, this);
    }

    private init() {
        /** 绘制角色 */
        this.context.addChild(this.role_png);
        /** 绘制角色名 */
        this.drawName();
        /** 
         * 给角色绑定移动的帧事件, 
         * 角色一直处于移动状态, 不同的仅仅是移动速度. 
         * 如果角色原地站立,即两轴移动速度为均为0 
         */
        this.role_png.addEventListener(egret.Event.ENTER_FRAME, this.moveCallBack, this);
        /** 把角色容器添加至屏幕 */
        this.addChild(this.context);
        this.context.x = this.role_path.x;
        this.context.y = this.role_path.y;
    }

    public drawName() {
        this.context.addChild(this.role_name);
        this.role_name.textColor = 0xffffff;
        this.role_name.anchorOffsetX = this.role_name.width / 2;
        this.role_name.anchorOffsetY = this.role_name.height;
        this.role_name.x = this.context.x;
        this.role_name.y = -this.role_png.height - 10;
    }
    /** 通过此方法计算角色的移动方向 */
    public move(evt: egret.Event) {
        this.angel = evt.data;
        this.nowState = 2;
    }
    /** 通过此方法移动角色 */
    private moveCallBack() {

        if (this.angel == null ) return;
        if (!this.canWalk) return;

        const speed_x = Math.cos(this.angel) * this.speed;
        const speed_y = Math.sin(this.angel) * this.speed;

        this.context.x += speed_x;
        this.context.y += speed_y;

        if (speed_x < 0) {
            this.context.scaleX = -Math.abs(this.context.scaleX);
            this.role_name.scaleX = -Math.abs(this.role_name.scaleX);
        } else if (speed_x > 0) {
            this.context.scaleX = Math.abs(this.context.scaleX);
            this.role_name.scaleX = Math.abs(this.role_name.scaleX);
        }


    }
    /** 角色停止移动 */
    public stop() {
        this.angel = null;

        this.nowState = 1;
    }

}